CensusでSourceにSnowflakeを設定してみた

CensusでSourceにSnowflakeを設定してみた

Clock Icon2024.10.22

さがらです。

CensusでSourceにSnowflakeを設定してみたので、その内容をまとめてみます。

https://docs.getcensus.com/sources/available-sources/snowflake

Snowflake側の手順

Snowflake側で、ロールやデータベースの準備が事前に必要です。

今回私は下記のクエリを実行しました。(公式ドキュメントのクエリを一部変更したものです。)

実際に試す際は既存のロールやウェアハウスを用いても問題はないため、必要な権限の参考にしてもらえればと思います。

-- 下記の変数を任意のものに変更してください。
SET CENSUS_ROLE = 'SAGARA_CENSUS_ROLE'; -- 新規作成:CENSUSとの連携に使用するロール
SET CENSUS_WAREHOUSE = 'SAGARA_CENSUS_WH'; -- 新規作成:CENSUSとの連携に使用するウェアハウス
SET CENSUS_DATABASE = 'SAGARA_CENSUS_DB'; -- 新規作成:CENSUSのAdvanced Sync用のデータを管理するデータベース
SET SOURCE_DATABASE = 'SAGARA_DBT_TEST_DB'; -- 既存:CENSUSでSourceに設定したいデータベース
SET SOURCE_SCHEMA = 'PRODUCTION'; -- 既存:CENSUSでSourceに設定したいスキーマ
SET CENSUS_USER = 'SAGARA_CENSUS'; -- 既存:CENSUSの認証に使用するユーザー

-- Create a role for the census user
USE ROLE SECURITYADMIN;
CREATE OR REPLACE ROLE IDENTIFIER($CENSUS_ROLE);
GRANT ROLE IDENTIFIER($CENSUS_ROLE) TO USER IDENTIFIER($CENSUS_USER);

-- Ensure the sysadmin role inherits any privileges the census role is granted. Note that this does not grant sysadmin privileges to the census role
GRANT ROLE IDENTIFIER($CENSUS_ROLE) TO ROLE SYSADMIN;

-- Create a warehouse for the census role, optimizing for cost over performance
USE ROLE SYSADMIN;
CREATE OR REPLACE WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) WITH WAREHOUSE_SIZE = XSMALL AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE;

GRANT USAGE ON WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT OPERATE ON WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT MONITOR ON WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) TO ROLE IDENTIFIER($CENSUS_ROLE);

-- Let the census user read the data you want to sync
-- This database and schema must have a different name than CENSUS
USE ROLE SYSADMIN;
USE DATABASE IDENTIFIER($SOURCE_DATABASE);
USE SCHEMA IDENTIFIER($SOURCE_SCHEMA);
GRANT USAGE ON DATABASE IDENTIFIER($SOURCE_DATABASE) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT USAGE ON SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT SELECT ON ALL TABLES IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT SELECT ON ALL VIEWS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT USAGE ON ALL FUNCTIONS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
USE ROLE ACCOUNTADMIN; -- なぜかSECURITYADMINでは私の環境でうまく動作しなかったため、止むを得ずACCOUNTADMINを使用しています
USE DATABASE IDENTIFIER($SOURCE_DATABASE);
USE SCHEMA IDENTIFIER($SOURCE_SCHEMA);
GRANT SELECT ON FUTURE VIEWS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT SELECT ON FUTURE TABLES IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT USAGE ON FUTURE FUNCTIONS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);

-- Required for Advanced Sync Engine, not required for Basic Sync Engine:
--  Create a private bookkeeping database where Census can store sync state,
--  perform faster unloads, and keep Warehouse Writeback logs

USE ROLE SYSADMIN;
CREATE OR REPLACE DATABASE IDENTIFIER($CENSUS_DATABASE) comment = 'CENSUSのAdvanced Sync用のデータを管理するデータベース';
GRANT ALL PRIVILEGES ON DATABASE IDENTIFIER($CENSUS_DATABASE) TO ROLE IDENTIFIER($CENSUS_ROLE);

USE DATABASE IDENTIFIER($CENSUS_DATABASE);
CREATE OR REPLACE SCHEMA CENSUS;
GRANT ALL PRIVILEGES ON SCHEMA CENSUS TO ROLE IDENTIFIER($CENSUS_ROLE);

GRANT CREATE STAGE ON SCHEMA CENSUS TO ROLE IDENTIFIER($CENSUS_ROLE);

Census側の手順

Censusの画面で、左のSourcesから右上のNew Sourceを押します。

2024-10-17_13h58_24

Snowflakeを選択します。

2024-10-17_13h59_30

Snowflake Account NameQuery Execution WarehouseUserPasswordなど、Snowflakeに関わる設定情報を入力して、右下のConnectを押します。

2024-10-17_14h07_34

右下のConfirmを押し、CensusとSnowflakeの接続が無事に確立されたら右下のFinishを押します。(最後の`Run test syncが完了するまで、合計1~2分ほど要します。)

これでSourceの設定は完了です!

2024-10-17_14h09_14

2024-10-17_14h13_13

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.